c++ - C++ 中复杂的 Typedef
全部标签 我想做的是这样的:templateDataTypemyFunc(DataTypein){...}typedefmyFuncmyFunc_i;myFunc_i(37);...但是,typedef不能用于C++中的此类函数。我想知道的是......在这种情况下人们的首选替代方案是什么?我能想到的只有:1)处理它,并且总是使用myFunc语法2)手动创建一个包装函数,即inlineintmyFunc_i(intin){returnmyFunc(in);}这可行,但缺点是需要额外维护,并且可能会不同步(即,如果您更改myFunc的函数签名)。想法? 最佳答案
我想做的是这样的:templateDataTypemyFunc(DataTypein){...}typedefmyFuncmyFunc_i;myFunc_i(37);...但是,typedef不能用于C++中的此类函数。我想知道的是......在这种情况下人们的首选替代方案是什么?我能想到的只有:1)处理它,并且总是使用myFunc语法2)手动创建一个包装函数,即inlineintmyFunc_i(intin){returnmyFunc(in);}这可行,但缺点是需要额外维护,并且可能会不同步(即,如果您更改myFunc的函数签名)。想法? 最佳答案
有谁知道为什么类名的typedef不像friend声明的类名那样工作?classA{public:};classB:publicA{public:typedefASUPERCLASS;};typedefAX;classC{public:friendclassA;//OKfriendclassX;//failsfriendclassB::SUPERCLASS;//fails}; 最佳答案 目前不能。我还不知道原因(只是查找它,因为我觉得它很有趣)。更新:您可以在第一个提案中找到支持typedef-names作为好友的原因:http:/
有谁知道为什么类名的typedef不像friend声明的类名那样工作?classA{public:};classB:publicA{public:typedefASUPERCLASS;};typedefAX;classC{public:friendclassA;//OKfriendclassX;//failsfriendclassB::SUPERCLASS;//fails}; 最佳答案 目前不能。我还不知道原因(只是查找它,因为我觉得它很有趣)。更新:您可以在第一个提案中找到支持typedef-names作为好友的原因:http:/
当我用g++编译以下代码片段时templateclassA{};templateclassB{public:typedefAA;};编译器告诉我error:declarationof‘typedefclassAB::A’error:changesmeaningof‘A’from‘classA’另一方面,如果我将typedef更改为typedef::AA;使用g++一切都可以正常编译。Clang++3.1不关心任何一种方式。为什么会这样?第二个行为标准是什么? 最佳答案 g++是正确的并且符合标准。来自[3.3.7/1]:AnameN
当我用g++编译以下代码片段时templateclassA{};templateclassB{public:typedefAA;};编译器告诉我error:declarationof‘typedefclassAB::A’error:changesmeaningof‘A’from‘classA’另一方面,如果我将typedef更改为typedef::AA;使用g++一切都可以正常编译。Clang++3.1不关心任何一种方式。为什么会这样?第二个行为标准是什么? 最佳答案 g++是正确的并且符合标准。来自[3.3.7/1]:AnameN
我有一个模板类Helper看起来像这样:templateclassHelper{public:usingmappedType=...;};我需要mappedType为map(constint&)返回的类型Mapper中的方法类(class)。给定Mapper的有效类型像下面这样:classDMapper{public:doublemap(constint&val){...}};Helper::mappedType应该是double.有没有办法在不实例化Mapper的情况下做到这一点??我得到的最接近的是:usingmappedType=typenamestd::result_of::t
我有一个模板类Helper看起来像这样:templateclassHelper{public:usingmappedType=...;};我需要mappedType为map(constint&)返回的类型Mapper中的方法类(class)。给定Mapper的有效类型像下面这样:classDMapper{public:doublemap(constint&val){...}};Helper::mappedType应该是double.有没有办法在不实例化Mapper的情况下做到这一点??我得到的最接近的是:usingmappedType=typenamestd::result_of::t
似乎有问题,使用literali在C++中使用std::complex.考虑以下代码:std::complexa=-1.0i*42.0;std::complexb=a+1.0i;第二行编译失败:error:nomatchfor‘operator+’(operandtypesare‘std::complex’and‘__complex__double’)在函数调用中使用复杂文字时也会出现这种情况,例如std::exp>(1.0i*3.14159);复杂的文字怎么来的1.0i不能转换为std::complex?我是否必须显式构造一个std::complex与1.0i?
似乎有问题,使用literali在C++中使用std::complex.考虑以下代码:std::complexa=-1.0i*42.0;std::complexb=a+1.0i;第二行编译失败:error:nomatchfor‘operator+’(operandtypesare‘std::complex’and‘__complex__double’)在函数调用中使用复杂文字时也会出现这种情况,例如std::exp>(1.0i*3.14159);复杂的文字怎么来的1.0i不能转换为std::complex?我是否必须显式构造一个std::complex与1.0i?